package com.example.hics_s.Application;

import javafx.application.Platform;
import javafx.scene.control.TextArea;

import java.io.IOException;
import java.io.OutputStream;

public class TextAreaOutputStream extends OutputStream {
    private final StringBuilder buffer = new StringBuilder();
    private final TextArea textArea;

    public TextAreaOutputStream(TextArea textArea) {
        this.textArea = textArea;
    }

    @Override
    public void write(int b) throws IOException {
        char character = (char) b;
        if (character == '\n') {
            // 当遇到换行符时，处理并更新 TextArea 内容
            String text = processOutput(buffer.toString());
            Platform.runLater(() -> textArea.appendText(text + "\n")); // 确保在JavaFX线程中更新UI
            buffer.setLength(0); // 清空缓冲区
        } else {
            buffer.append(character); // 收集字符
        }
    }

    private String processOutput(String output) {
        // 去掉日期、时间和 ANSI 转义字符
        return output.replaceAll("\\[\\d+m", "") // 移除 ANSI 颜色代码
                .replaceAll("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\+\\d{2}:\\d{2}", "") // 移除日期时间
                .replaceAll("\\[0;39m", "") // 移除其他 ANSI 字符
                .trim(); // 去掉前后空格
    }
}